<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ProMRDS Arm Mover</title>
<link href="../Styles/Standard.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="100%">
<tr>
<td width="200"><a href="http://www.ProMRDS.com"><img src="../Images/HomeIcon.gif" alt="ProMRDS Home Page" border="0" width="200" height="60" /></a></td>
<td width="*" align="center"><img src="Images/ArmMover.gif" alt="Arm Mover" /></td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
</table>

<div class="page">
<p class="heading"><span class="smallhead">Professional</span><br />&nbsp;&nbsp;&nbsp;Microsoft Robotics Developer Studio<br />
<a href="http://www.ProMRDS.com" onmouseout="Home.src='../Images/Home.gif';" onmouseover="Home.src='../Images/Home_f2.gif';"><img name="Home" src="../Images/Home.gif" width="150" height="25" border="0" alt="Home Page" /></a>
<a href="../ReadMe.htm" onmouseout="Contents.src='../Images/Contents.gif';" onmouseover="Contents.src='../Images/Contents_f2.gif';"><img name="Contents" src="../Images/Contents.gif" width="150" height="25" border="0" alt="Book Contents" /></a>
<a href="ReadMe.htm" onmouseout="ThisChapter.src='../Images/ThisChapter.gif';" onmouseover="ThisChapter.src='../Images/ThisChapter_f2.gif';"><img name="ThisChapter" src="../Images/ThisChapter.gif" width="150" height="25" border="0" alt="This Chapter" /></a>
</p>

<h1>Arm Mover</h1>

<h2>Purpose</h2>
<p>
The Arm Mover works with an Xbox controller and allows you to move
a robotic arm. Versions are provided that work with either the
simulated or the real Lynx 6 Arm.
</p>

<h2>Description</h2>

<p>
There are two fundamentally different approaches to moving a robotic arm:<br />
Specify the location of the tip of the arm in 3D coordinates;<br />
or<br />
Move the individual joints separately.
</p>
<p>
The MoveArm program allows you to set the End Effector Pose by using the
controls as follows:
</p>
<ul>
<li>Left Thumbstick X (left-right) = Arm X</li>
<li>Left Thumbstick Y (up-down) = Arm Z</li>
<li>Right Thumbstick Y (up-down) = Arm Y</li>
<li>Buttons Y and A control the angle of the Wrist</li>
</ul>
<p>
NOTE: This diagram does not allow you to use the Gripper.
</p>
<p>
The coordinate system for the arm is as follows (and is the same for the real arm or the
simulated arm which always starts with a camera view similar to the following picture):
</p>
<img src="Images/Lynx6Coords.jpg" alt="Lynx 6 Coordinate System" />
<p>
This means that the right thumbstick moves the End Effector up and down. The
left thumbstick makes the End Effector move along the respective axes (maintaining
the same height), which affects both depth and rotation at the same time. If you
move the left thumbstick only in the X or the Y direction, the tip moves in a
straight line.
</p>
<p>
Initially the MoveArm program is set up to use the simulated arm.
You need to replace the simulated arm with the real arm if you
want to use it. For your convenience, another diagram called
MoveArm_Real is also included which has the manifest already
replaced. It also used the X/B buttons for the gripper.
</p>
<p>
The alternative to using the End Effector Pose is to use the Xbox controller to manipulate the
individual joints. The MoveArmJoints diagram allows you do do this as follows:
</p>
<ul>
<li>Left Thumbstick X (left-right) = Base Rotate</li>
<li>Left Thumbstick Y (up-down) = Shoulder (lean forwards/backwards)</li>
<li>Right Thumbstick X (left-right) = Wrist Rotate</li>
<li>Right Thumbstick Y (up-down) = Elbow</li>
<li>Buttons Y and A control the angle of the Wrist</li>
<li>Buttons X and B control the Gripper</li>
</ul>
<p>
IMPORTANT NOTES: For the real arm, you should be very careful about the
amount of pressure that you apply using the gripper. Use short bursts
on the X and B buttons. For the simulated arm, there is a significant
lag when you use the gripper, so avoid holding down X or B because it
will flood the arm with messages and take a while to recover.
</p>
<p>
MoveArmJoints is also set up initially to use the simulated arm.
The MoveArmJoints_Real diagram works with the real arm. It also
adds another level of sophistication because the MoveJoint custom
activity allows you to change the arm in just one place even though
there are six joints movements in the main diagram.
</p>
<p>
Try out both methods of control. You might find that one method
or the other suits your own personal &quot;feel&quot; for how
the robot should move. 
If the directions of motion are not intuitive to you, then change
the connections in the diagram.
</p>
<p>
Of course, you can combine both of the
methods but that gets a little tricky. If you like to use the
left thumbstick to rotate the arm, and wanted to control
the vertical position using the Pose, then you must first get the
current Pose and extract the X and Z values before you change the
Y value. Rotating the Base joint changes BOTH the X and Z
coordinates (because the tip moves on the circumference of
a circle). Good luck!
</p>

</div>

<hr />
<div class="footer">
Page maintained by:
<a href="m&#97;&#105;&#108;t&#111;:webmaster&#64;promrds&#46;com">webmaster&#64;promrds.com</a><br />
Last Updated: Mar-2008
</div>

</body>
</html>
